package com.piece.core.mongo.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.io.Serializable;
import java.util.Date;

/**
 * 消息发送日志表 sys_message_log
 */
@Data
@NoArgsConstructor
@Document(collection = "sys_message_log")
@CompoundIndexes({
        @CompoundIndex(name = "index_sys_message_log", def = "{'logId':1,'address':1,'opera_time':1}")
})
public class MongoMessageLog implements Serializable {

    /**
     * 日志主键
     */
    @Id
    private String logId;

    /**
     * 应用名
     */
    @Field("application_name")
    private String applicationName;

    /**
     * 类型
     * ${@link com.piece.core.log.enums.MessageLogType}
     */
    @Field("type")
    private String type;

    /**
     * 消息中间件名称
     */
    @Field("message_type")
    private String messageType;

    /**
     * 消息名称
     */
    @Field("title")
    @Indexed(expireAfterSeconds = 60 * 60 * 24 * 30) // 一个月后过期
    private String title;

    /**
     * 消息内容
     */
    @Field("content")
    private String content;

    /**
     * 接收地址
     */
    @Field("address")
    private String address;

    /**
     * 主题名称
     */
    @Field("topic")
    private String topic;

    /**
     * 交换机名称
     */
    @Field("exchange")
    private String exchange;

    /**
     * 路由名称
     */
    @Field("router")
    private String router;

    /**
     * 执行方法
     */
    @Field("method")
    private String method;

    /**
     * 登录IP
     */
    @Field("ip")
    private String ip;

    /**
     * 登录城市
     */
    @Field("city")
    private String city;

    /**
     * 登录地点
     */
    @Field("area")
    private String area;

    /**
     * 浏览器
     */
    @Field("browser")
    private String browser;

    /**
     * 操作系统
     */
    @Field("os")
    private String os;

    /**
     * 发送状态（0完成 1删除 2执行中 3暂停 4错误）
     */
    @Field("status")
    private String status;

    /**
     * 说明
     */
    @Field("desc")
    private String desc;

    /**
     * 租户id
     */
    @Field("client_id")
    private String clientId;

    /**
     * 操作用户id
     */
    @Field("opera_id")
    private String operaId;

    /**
     * 操作用户名
     */
    @Field("opera_name")
    private String operaName;

    /**
     * 发送时间
     */
    @Field("start_time")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;

    /**
     * 送达时间
     */
    @Field("end_time")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;

    /**
     * 执行时间
     */
    @Field("exec_time")
    private String execTime;

    /**
     * 重试次数
     */
    @Field("retry_count")
    private int retryCount;

    /**
     * 消息体对象
     */
    private String entity;
}
